package com.jzxk.handler.pay.wxpay;

import org.apache.commons.codec.digest.DigestUtils;

import java.util.*;

/**
 * @author 今朝惜客
 * @CreateTime : 16/9/13 下午4:52
 * @Description : XXX
 */
public abstract class WXPayUtils {

	/**
	 * 微信支付API接口协议中包含字段nonce_str，主要保证签名不可预测。我们推荐生成随机数算法如下：调用随机数函数生成，将得到的值转换为字符串。
	 * @return
	 */
	public static String getNonceStr() {
		Random random = new Random();
		return DigestUtils.md5Hex(String.valueOf(random.nextInt(10000)));
	}

	/**
	 * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
	 */
	public static String createSign(SortedMap<String, String> packageParams,String key) {

		StringBuffer sb = new StringBuffer();
		Set<Map.Entry<String, String>> es = packageParams.entrySet();
		Iterator<Map.Entry<String, String>> it = es.iterator();

		while (it.hasNext()) {
			Map.Entry<String, String> entry = it.next();
			String k = entry.getKey();
			String v = entry.getValue();
			if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
				sb.append(k + "=" + v + "&");
			}
		}
		sb.append("key=" + key);

		String sign = DigestUtils.md5Hex(sb.toString()).toUpperCase();
		return sign;
	}
}
